/**
 * Allocates a memory block aligned to a given address boundary.
 *
 * @param size      Size in bytes
 * @param alignment Address alignment
 *
 * @return pointer to newly allocated memory block at the specified alignment
 *
 * @note Memory allocated by this function must be fred by mem_free_aligned().
 */
void * mem_malloc_aligned (size_t size, size_t alignment);

/**
 * Frees a memory block allocated by mem_alloc_aligned().
 *
 * @param ptr Pointer to memory block
 *
 * @note mem_free_aligned() accepts NULL pointers.
 */
void mem_free_aligned (void *ptr);

size_t get_total_system_memory();
